// 引入mockjs
import Mock from 'mockjs';

//用户管理
let tableUserList = Mock.mock({
	'list|45': [{
		'key': '@increment(1)',
		'userName': '@name',
		'nickName': '@cname',
		'deptName': '@pick(["研发部门", "管理部门", "人事部", "行政部门"])',
		'phonenumber': /^1[3-9]\d{9}$/, // 随机生成11位手机号（纯数字）  @string("number", 11)
		'status': '@integer(0,1)', // 随机生成 0 或 1
		'createTime': '@datetime("yyyy-MM-dd HH:mm:ss")', // 随机生成时间（年月日 时分秒）
		'userId': '@increment(1)',
		'cardNo': '@integer(100000000000, 999999999999)' //卡号
	}]
}).list;


//角色管理
let tableRoleList = Mock.mock({
	'list|45': [{
		'key': '@increment(1)',
		'roleName': '@pick(["超级管理员", "管理员", "本部门以下", "自定义角色"])',
		'authority': '@pick(["admin", "zby", "supper", "menu"])',
		'showIndex': '@integer(1, 20)',
		'status': '@integer(0,1)', // 随机生成 0 或 1
		'createTime': '@integer(100000000000, 999999999999)', // 随机生成时间（年月日 时分秒）
		'timestamp': '@timestamp',
		'userId': '@increment(1)',
	}]
}).list;


// 获取用户列表
Mock.mock('/api/userList', 'post', function (option) {
	const { body } = option
	let list = tableUserList
	if (body) {
		const obj = JSON.parse(body)
		const { username, phone, status, cardNo } = obj;

		list = tableUserList.filter(item => {
			// 如果 name 存在且非空，才检查 item.nickName.includes(name)
			const nameMatch = username ? item.nickName.includes(username) : true;
			// console.log('nameMatch', nameMatch);
			// 如果 phone 存在且非空，才检查 item.phonenumber.includes(phone)
			const phoneMatch = phone ? item.phonenumber.includes(phone) : true;
			const statusMatch = status ? Number(status) === item.status : true
			// 卡号搜索
			const cardMatch = cardNo ? Number(cardNo) === item.cardNo : true

			// 只有 nameMatch 和 phoneMatch 都为 true，才保留这个项
			return nameMatch && phoneMatch && statusMatch && cardMatch;
		})

		console.log('list', list, body);
	}
	return {
		code: '0',
		msg: 'success',
		tableList: list
	}
})

// 编辑单个用户信息
Mock.mock('/api/upDateUserList', 'post', function (option) {
	const { body } = option
	let list = tableUserList
	if (body) {
		const obj = JSON.parse(body)
		const { userId } = obj;

		list = tableUserList.map(item => {
			return item.userId === userId ? { ...item, ...obj } : item
		})

		console.log('list', list, body);
	}
	return {
		code: '0',
		msg: 'success',
		tableList: list
	}
})
//删除用户
Mock.mock('/api/delIds', 'post', function (option) {
	const { body } = option;
	// let list = tableUserList
	if (body) {
		const obj = JSON.parse(body)
		const ids = obj.ids
		console.log('obj', ids);
		tableUserList = tableUserList.filter(item => !ids.includes(item.key))
	}
	return {
		code: '0',
		msg: 'success',
		tableList: tableUserList
	}
})

// 获取角色列表
Mock.mock('/api/roleList', 'post', function (option) {
	// console.log('option',option);
	const { body } = option
	let list = tableUserList
	if (body) {
		const obj = JSON.parse(body)
		const { username, phone, status } = obj;

		list = tableUserList.filter(item => {
			// 如果 name 存在且非空，才检查 item.nickName.includes(name)
			const nameMatch = username ? item.nickName.includes(username) : true;
			// console.log('nameMatch', nameMatch);
			// 如果 phone 存在且非空，才检查 item.phonenumber.includes(phone)
			const phoneMatch = phone ? item.phonenumber.includes(phone) : true;
			const statusMatch = status ? Number(status) === item.status : true

			// 只有 nameMatch 和 phoneMatch 都为 true，才保留这个项
			return nameMatch && phoneMatch && statusMatch;
		})

		console.log('list', list, body);
	}
	return {
		code: '0',
		msg: 'success',
		tableList: tableRoleList
	}
})

//删除角色
Mock.mock('/api/delRoleIds', 'post', function (option) {
	const { body } = option;
	// let list = tableUserList
	if (body) {
		const obj = JSON.parse(body)
		const ids = obj.ids
		console.log('obj', ids);
		tableRoleList = tableRoleList.filter(item => !ids.includes(item.key))
	}
	return {
		code: '0',
		msg: 'success',
		tableList: tableRoleList
	}
})
//修改角色状态
Mock.mock('/api/updateRoleStatus', 'post', function (option) {
	const { body } = option;
	if (body) {
		const obj = JSON.parse(body)
		const { key, status } = obj;
		console.log('updateRoleStatus', obj);

		// 根据key找到对应角色并修改状态
		tableRoleList = tableRoleList.map(item => {
			return item.key === key ? { ...item, status: Number(status) } : item
		})
	}
	return {
		code: '0',
		msg: 'success',
		tableList: tableRoleList
	}
})

//增加角色
Mock.mock('/api/addRoleIds', 'post', function (option) {
	const { body } = option;
	// let list = tableUserList
	if (body) {
		const obj = JSON.parse(body)
		console.log('obj', obj);
		const user = obj.user
		user.status = Number(user.status)
		user.createTime = new Date().getTime()
		user.key = Math.floor(Math.random() * 1000)
		tableRoleList.unshift(obj.user)
	}
	return {
		code: '0',
		msg: 'success',
		tableList: tableRoleList
	}
})


// 菜单管理 
import menuList from './menu.json'
// 获取菜单列表数据
Mock.mock('/api/menuList', 'post', function (option) {
	// console.log('option',option);
	const { body } = option
	let list = menuList
	if (body) {
		const obj = JSON.parse(body)
		const { username, phone, status } = obj;

		list = menuList.filter(item => {
			// 如果 name 存在且非空，才检查 item.nickName.includes(name)
			const nameMatch = username ? item.nickName.includes(username) : true;
			// console.log('nameMatch', nameMatch);
			// 如果 phone 存在且非空，才检查 item.phonenumber.includes(phone)
			const phoneMatch = phone ? item.phonenumber.includes(phone) : true;
			const statusMatch = status ? Number(status) === item.status : true

			// 只有 nameMatch 和 phoneMatch 都为 true，才保留这个项
			return nameMatch && phoneMatch && statusMatch;
		})

		console.log('list', list, body);
	}
	return {
		code: '0',
		msg: 'success',
		tableList: list
	}
})
// 增加菜单
Mock.mock('/api/addMenu', 'post', function (option) {
	const { body } = option;
	if (body) {
		const obj = JSON.parse(body);
		const menu = obj.menu || obj.item || obj.data;
		if (menu) {
			const getMaxMenuId = (list) => {
				let max = 0;
				const traverse = (arr) => {
					arr.forEach(node => {
						if (typeof node.menuId === 'number' && node.menuId > max) max = node.menuId;
						if (Array.isArray(node.children) && node.children.length) traverse(node.children);
					})
				}
				traverse(menuList);
				return max;
			}

			const findByMenuId = (list, id) => {
				for (let i = 0; i < list.length; i++) {
					const node = list[i];
					if (node.menuId === id) return node;
					if (Array.isArray(node.children) && node.children.length) {
						const found = findByMenuId(node.children, id);
						if (found) return found;
					}
				}
				return null;
			}

			// 规范化字段
			menu.key = menu.key || Math.random().toString(16).slice(2, 10);
			menu.status = String(menu.status ?? '0');
			menu.createTime = menu.createTime || new Date().getTime();
			if (!Array.isArray(menu.children)) menu.children = [];
			if (typeof menu.parentId !== 'number') menu.parentId = 0;
			if (typeof menu.menuId !== 'number') {
				const maxId = getMaxMenuId(menuList);
				menu.menuId = maxId + 1;
			}

			// 插入到指定位置
			if (menu.parentId === 0) {
				menuList.unshift(menu);
			} else {
				const parent = findByMenuId(menuList, menu.parentId);
				if (parent) {
					if (!Array.isArray(parent.children)) parent.children = [];
					parent.children.push(menu);
				} else {
					// 未找到父级则作为一级菜单添加
					menuList.unshift(menu);
				}
			}
		}
	}
	return {
		code: '0',
		msg: 'success',
		tableList: menuList
	}
})
